﻿using System;
using System.Text;
using Core.Domain.Lexems;

namespace Core.SyntaxAnalysis.Classes
{
    public class Identificator : Expr // конечный класс, для него будет таблица
    {
        public Identificator(Lexem lex)
        {
            Lex = lex;
        }

        public string Name
        {
            get { return Lex.StrValue; }
        }

        public static Identificator Create(Lexem lex)
        {
            return Env.AddId(lex);
        }

        public static Identificator Find(Lexem lex)
        {
            return Env.FindId(lex);
        }

        public void BindType(DataType type)
        {
            if (Type == null)
            {
                Type = type;
            }
            else
            {
                throw new ArgumentException("Тип переменной уже определён");
            }
        }

        public override DataType GetExprType()
        {
            if (Type == null)
            {
                throw new Exception("Неописанная переменная");
            }
            return Type;
        }

        public override string ExprGenerate(StringBuilder s)
        {
            return Lex.StrValue;
        }
    }
}